﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Seguridad.DataAccess;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Seguridad.ControlExeption;
using System.Data.SqlClient;
using System.Data;

namespace Crosland.Automotriz.Seguridad.Business
{
    public class clsGrupoLogic
    {
        clsGrupoDAO GrupoDao = new clsGrupoDAO();

        public List<T_SEG_GRUPO> listarGrupo(string USR_CREACION)
        {
            return GrupoDao.listarGrupo(USR_CREACION);

        }

        public List<T_SEG_GRUPO> ListarAccesosUsuario()
        {
            return GrupoDao.listarAccesosUsuarios();

        }

       
        public List<T_SEG_USUARIO_GRUPO> listarUsuario_Grupo()
        {


            return GrupoDao.listarUsuario_Grupo();
        }
        
        public List<int> ObtenerOpcion_Grupo(int idGrupo)
        {

            return GrupoDao.ObtenerOpcion_Grupo(idGrupo);
        }
        
        public bool Insertar(T_SEG_GRUPO obj)
        {

            return GrupoDao.Insertar(obj);
        }

        public bool Modicar(T_SEG_GRUPO obj)
        {
            return GrupoDao.Modificar(obj);
        }

        public bool Eliminar(T_SEG_GRUPO obj)
        {
            return GrupoDao.Eliminar(obj);
        }


        public bool EliminarGrupoopcion(int id_grupo)
        {

            return GrupoDao.PA_delteGrupoOpcion(id_grupo);

        }
        
        public bool ActualizarEstadoGrupo(int id_grupo, string estado)
        {
            try
            {
                return GrupoDao.Actualiza_EstadoGrupo(id_grupo, estado);
            }
            catch (SqlException sqlEx) { throw new RunException("ERROR AL ACTUALIZAR LA TABLA T_SEG_GRUPO", sqlEx); }
            catch (Exception ex) { throw new RunException("ERROR EN LA APLICACION POR FAVOR CONSULTE: ", ex); }
        }

         public int GrabarGrupo(T_SEG_GRUPO entity, List<int> listOpciones)
        {
            int id = 0;
            try
            {


                //GrupoDao.save(entity);
                //id = GrupoDao.saveGrupo(entity);

                //this.GrabarAccesosGrupo(id, listOpciones);

                //if (entity.ID_GRUPO == 0)
                //{
                id = Convert.ToInt32(GrupoDao.InsertarGrupo(entity));

                this.GrabarAccesosGrupo(id, listOpciones);


                //return id;
                //}
                //else
                //{
                //    entity.USR_ACTUALIZO = entity.USR_CREACION;
                //    GrupoDao.Modificar(entity);
                //    id = entity.ID_GRUPO;
                //}

            }

            catch (EntityException sqlEx)
            {

                throw new RunException("ERROR EN EL PROCEDIMIENTO ALMACENADO EN USP_SAVE_GRUPO", sqlEx);
            }
            catch (Exception ex)
            {
                throw new RunException("ERROR EN LA APLICACION POR FAVOR CONSULTE: ", ex);
            }      

            return id;
        }

        public void GrabarAccesosGrupo(int id, List<int> listOpciones)
        {

            //GrupoDao.Delete(group);

            foreach (int idOpcion in listOpciones)
            {
                VW_GRUPO_OPCION entity = new VW_GRUPO_OPCION();
                entity.ID_GRUPO = id;
                entity.ID_OPCION = idOpcion;

                GrupoDao.InsertarGrupoOpcion2(id, idOpcion);
                
            }
        }

        public T_SEG_GRUPO ObtenerGrupo(int idGrupo)
        {
            return GrupoDao.ObtenerGrupo(idGrupo);
        }

        public List<T_SEG_GRUPO> listarGrupo2()
        {
            try
            {
                return GrupoDao.listarGrupo2();
            }
            catch (Exception ex)
            {
                throw new RunException("Error al listar en la Tabla T_SEG_GRUPO ", ex);
            }
        }

        public List<T_SEG_GRUPO> listarGrupoxOpcion(int id_opcion) {
            return GrupoDao.listarGrupoxOpcion(id_opcion);
        }


          public IEnumerable<Object> listaUsuarioxGrupo(int id_grupo) {


              return GrupoDao.listaUsuarioxGrupo(id_grupo);
          }


          public bool EliminaRelacionGrupoOpcion(int idGrupo, int idOpcion) {

              return GrupoDao.EliminaRelacionGrupoOpcion(idGrupo,idOpcion);
          }
    }
}
